package com.ruoyi.fire.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.fire.domain.TUserUnit;
import com.ruoyi.fire.domain.dto.TUserUnitVO;
import com.ruoyi.fire.mapper.TUserUnitMapper;
import com.ruoyi.fire.service.ITUserUnitService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

@Slf4j
@Service
@RequiredArgsConstructor
public class TUserUnitServiceImpl extends ServiceImpl<TUserUnitMapper, TUserUnit> implements ITUserUnitService {

    /**
     * 授权用户单位
     *
     * @param tUserUnitVO
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean authUserUnit(TUserUnitVO tUserUnitVO) {
        // 参数校验
        if (tUserUnitVO == null || tUserUnitVO.getUserId() == null) {
            return false;
        }

        // 构建查询条件
        LambdaQueryWrapper<TUserUnit> wrapper = Wrappers.lambdaQuery(TUserUnit.class);
        wrapper.eq(TUserUnit::getUserId, tUserUnitVO.getUserId());

        if (CollectionUtils.isEmpty(tUserUnitVO.getUnitIds())) {
            return remove(wrapper);
        } else {
            try {
                // 先删除原有授权
                remove(wrapper);

                // 批量插入新授权
                List<TUserUnit> tUserUnits = new ArrayList<>(tUserUnitVO.getUnitIds().size());
                for (String unitId : tUserUnitVO.getUnitIds()) {
                    TUserUnit tUserUnit = new TUserUnit();
                    tUserUnit.setUserId(tUserUnitVO.getUserId());
                    tUserUnit.setUnitId(unitId);
                    tUserUnits.add(tUserUnit);
                }
                return saveBatch(tUserUnits);
            } catch (Exception e) {
                log.error("授权用户单位失败，userId: {}", tUserUnitVO.getUserId(), e);
                throw e;
            }
        }
    }

    /**
     * 查询用户单位详情
     * @param tUserUnitVO
     * @return
     */
    @Override
    public List<TUserUnit> authUserUnitDetail(TUserUnitVO tUserUnitVO) {
        LambdaQueryWrapper<TUserUnit> wrapper = Wrappers.lambdaQuery(TUserUnit.class);
        wrapper.eq(TUserUnit::getUserId, tUserUnitVO.getUserId());
        return list(wrapper);
    }
}
